package com.falcon.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @author zongf
 * @since 2021-11-02
 */
@Component
@ConfigurationProperties(prefix = "falcon.generator")
@Data
public class GeneratorConfig {

    /** 作者 */
    private String author;

    /** 项目根目录 */
    private String projectPath;

    /** 表前缀, 自动移除 */
    private String[] tablePrefix;

    /** po 生成配置 */
    private ClassConfig po;

    /** do 生成配置 */
    private ClassConfig dto;

    /** service接口 配置*/
    private ClassConfig serviceApi;

    /** service实现类 配置*/
    private ClassConfig serviceImpl;

    /** controller */
    private ClassConfig controller;

    /** query 配置*/
    private ClassConfig query;

    /** request 配置*/
    private ClassConfig request;

    /** mapper 配置*/
    private MapperConfig mapper;

    /** 项目根目录 */
    private String packageName;

    /** vben 配置 */
    private VbenConfig vbenConfig = new VbenConfig();

    @Data
    public static class ClassConfig {

        /** 包名*/
        private String packageName;

        /** 生成类前缀, 自动添加 */
        private String namePrefix;

        /** 生成类后缀, 自动移除 */
        private String nameSuffix;

        /** 父类名称, 全类名 */
        private Class parentClass;

    }

    @Data
    public static class MapperConfig extends ClassConfig {

        /** id 类型: Integer/Long/String*/
        private String idType;

        /** xml 文件存放目录 */
        private String xmlDir;
    }

    @Data
    public static class VbenConfig {

        /** 相对于 projectPath 目录: z-ui/web-ui*/
        private String relativeBasePath = "/z-ui/web-ui";

        /** api Path: src/api */
        private String apiPath = "/src/api";

        /** api/model 目录 */
        private String apiModelPath = apiPath + "/model";

        /** api Path: mock */
        private String mockPath = "/mock";

        /** pages 目录 */
        private String pagesPath = "/src/pages";

        /** views 目录 */
        private String viewsPath = "/src/views";



    }

}
